有人可以帮我解决我的问题吗? click()方法在以下代码的下拉列表中不起作用。
package com.driver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Listdown {
static WebDriver driver;
public static void main(String[] args) {
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("https://accounts.google.com/SignUp?service=mail&hl=ru&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fpc%3Dtopnav-about-ru");
driver.findElement(By.xpath("(//strong[text()='Пол']/following-sibling::div/div[@role='listbox'])[1]")).click();
driver.findElement(By.xpath("//div[text()='Мужской']/parent::div[@role='option']")).click();
}
}
在结果中,我必须收到标记的复选框“Мужской”,但我没有。
添加html代码:
<div id="gender-form-element" class="form-element">
<label id="gender-label">
<strong id="GenderLabel">Пол</strong>
<div id="Gender" class=" form-error" aria-invalid="true">
<div class="goog-inline-block goog-flat-menu-button jfk-select" role="listbox" style="-moz-user-select: none;" aria-expanded="false" tabindex="0" aria-haspopup="true" title="Пол" aria-activedescendant=":d">
<div class="goog-menu goog-menu-vertical" style="-moz-user-select: none; visibility: visible; left: 0px; top: 21.5px; display: none;" role="listbox" aria-haspopup="true">
<div id=":e" class="goog-menuitem" role="option" style="-moz-user-select: none;">
<div id=":f" class="goog-menuitem" role="option" style="-moz-user-select: none;">
<div class="goog-menuitem-content">Мужской</div>
</div>
<div id=":g" class="goog-menuitem" role="option" style="-moz-user-select: none;">
<div id=":h" class="goog-menuitem" role="option" style="-moz-user-select: none;">
</div>
<input id="HiddenGender" type="hidden" name="Gender"/>
</div>
</label>
<span id="errormsg_0_Gender" class="errormsg" role="alert">Это поле должно быть заполнено.</span>
答案 0 :(得分:0)
实际上你的代码工作正常 我已经在我的环境中尝试过了,正确地从下拉列表中选择了文本 我唯一改变的是我添加了gecko驱动程序的路径
这是您在我的机器上运行的已编辑代码:
public class test1 {
static WebDriver driver;
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "C:\\Eclipse\\geckodriver\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("https://accounts.google.com/SignUp?service=mail&hl=ru&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fpc%3Dtopnav-about-ru");
driver.findElement(By.xpath("(//strong[text()='Пол']/following-sibling::div/div[@role='listbox'])[1]")).click();
driver.findElement(By.xpath("//div[text()='Мужской']/parent::div[@role='option']")).click();
}
}
我正在使用gecko驱动程序:geckodriver-v0.14.0-win64
我的Firefox浏览器版本是:51.0.1
因此问题可能与您的环境有关
答案 1 :(得分:-1)
相反,您可以将WebElement变形为选择对象并使用如下所示的方法:
Select dropdown = new Select(driver.findElement("Your locator goes here"));
dropdown.selectByVisibleText("Мужской");
如果您愿意,可以使用selectByValue()或selectByIndex代替以前的方法。
修改强>
我看过您正在处理的页面并修改了您的代码。
首先,点击下拉列表:
driver.findElement(By.cssSelector("#Gender > div > div")).click();
然后,按如下方式调用该方法:
selectItemFromList(By.cssSelector("#Gender > div[class='goog-menu goog-menu-vertical'] > div > div"), "Your item name goes here"); // you can any locator here for other dropdown menu
这是您之前调用的方法实现:
static void selectItemFromList(By element, String itemName){
List<WebElement> itemList = driver.findElements(element);
for(WebElement item : itemList){
if(item.getText().trim().equals(itemName)){
item.click();
break;
}
}
}