在Selenium PHP Web Driver上选择随机单选按钮

时间:2016-03-26 19:20:21

标签: php selenium selenium-webdriver

我正在使用Selenium PHP Web Driver。我对这个Selenium世界很陌生。

我有2个无线电选项

enter image description here

HTML

<div class="form-group">
    <div>Gender</div>
    <label class="radio-inline">
        <input type="radio" name="gender" value="male" checked="checked"> Male
    </label>
    <label class="radio-inline">
        <input type="radio" name="gender" value="female"> Female
    </label>
</div>

选择定位器

$gender = $webdriver->findElementBy(LocatorStrategy::name,"gender");
if ($gender) {
    $gender->click("xpath=(//input[@name='gender'])[2]");
}

我似乎无法点击我的第二​​个选项。

我错过了什么吗?

这是我的整个文件

cp.php

<?php

require_once "phpwebdriver/WebDriver.php";

$length = 2;
$str = '';
for ($x = 0; $x <= 5; $x++) {
    $randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
    $str = $str.$randomString.':';
}
$mac = strtoupper(substr($str, 0, -1));


$user = shell_exec('curl https://randomuser.me/api/');
$user = json_decode($user,true);
$user = $user['results'][0]['user'];

$rand_first = ucfirst($user['name']['first']);
$rand_last = ucfirst($user['name']['last']);
$rand_email = $user['email'];


$webdriver = new WebDriver("localhost", "4444");
$webdriver->connect("firefox");
$webdriver->get("http://localhost:8888/captive-portal?client_mac=".$mac.'&ap=00:0D:67:66:F2:F6&original_uri=http%3A%2F%2Fwww.apple.com');


$first_name = $webdriver->findElementBy(LocatorStrategy::name, "firstname");
if ($first_name) {
    $first_name->sendKeys(array($rand_first));
}

$last_name = $webdriver->findElementBy(LocatorStrategy::name, "lastname");
if ($last_name) {
    $last_name->sendKeys(array($rand_last));
}

$email = $webdriver->findElementBy(LocatorStrategy::name, "email");
if ($email) {
    $email->sendKeys(array($rand_email));
}

//Issues
$age = $webdriver->findElementBy(LocatorStrategy::name,"age");
if ($age) {
    $age->click("xpath=(//input[@name='age'])[2]");
}

//Issues
$gender = $webdriver->findElementBy(LocatorStrategy::name,"gender");
if ($gender) {
    $gender->click("xpath=(//input[@name='gender'])[2]");
}


$submit = $webdriver->findElementBy(LocatorStrategy::id, "btn-cp-submit");
if ($submit) {
    $submit->submit();
}

$webdriver->close();

?>

1 个答案:

答案 0 :(得分:2)

我不是PHP编码器,所以我希望这一切都是正确的。我不是100%清楚你正在使用哪个PHP Selenium包装器,这肯定会有所帮助。我将使用https://github.com/facebook/php-webdriver编写其中一些示例。

当你这样做时:

$gender = $webdriver->findElementBy(LocatorStrategy::name,"gender");
if ($gender) {
    $gender->click("xpath=(//input[@name='gender'])[2]");
}

你只是给它第一个单选按钮实例。然后你试图传递一个你不能将变量传递给的点击事件。 Click是一个函数,但没有任何参数。

如果您想要一些随机生成的按钮,您可以执行以下操作:

$gender = $webdriver->findElementsBy(LocatorStrategy::name,"gender");
if (rand() % 2 == 0) {
    $gender[0]->click();
}else{
    $gender[1]->click();
}

你会注意到一个微小的区别,我正在使用FindElement s By()和多个元素,它们会在页面和商店中抓取所有这些内容他们在阵列中。

我不是100%确定数组如何使用php版本,但是这样的东西应该适合你。