2016-03-26 2 views
0

Я использую Selenium PHP Web Driver. Я очень новичок в этом мире Селена.Выбор случайной радио кнопки на Selenium PHP Web Driver

У меня есть 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("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 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(); 

?> 

ответ

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 К() с множественными элементов, который говорит, захватить все это на странице и сохранить их в массиве.

Я не уверен на 100%, как массивы работают с версией php, но что-то подобное должно работать на вас.

Смежные вопросы