我在点击页面上的以下下拉列表中的选项选项时遇到问题:
http://www.lan.com/es_co/sitio_personas/index.html
当我运行代码时:
By byCabinSelect = By.cssSelector("select[name=\"campoComboCabina\"]");
List<WebElement> cabinSelects = driver.findElements( byCabinSelect );
for (WebElement cabinSelect : cabinSelects) {
List<WebElement> Elements = cabinSelect.findElements(By.cssSelector("*"));
System.out.println( Misc.getElementData(cabinSelect));
System.out.println( Misc.getElementData(Elements) );
}
我可以看到我有一个似乎是正确的选择器,但元素的选项被标记为不可见:
tagName: select
id:
text:
innerHtml: <option value="Y">Economy</option><option value="W">Premium Economy</option><option value="J">Premium Business</option>
outerHtml: <select name="campoComboCabina" class="" aria-disabled="false" style="display: none;"><option value="Y">Economy</option><option value="W">Premium Economy</option><option value="J">Premium Business</option></select>
isDisplayed: false
isEnabled: true
tagName: option
id:
text:
innerHtml: Economy
outerHtml: <option value="Y">Economy</option>
isDisplayed: false
isEnabled: true
tagName: option
id:
text:
innerHtml: Premium Economy
outerHtml: <option value="W">Premium Economy</option>
isDisplayed: false
isEnabled: true
tagName: option
id:
text:
innerHtml: Premium Business
outerHtml: <option value="J">Premium Business</option>
isDisplayed: false
isEnabled: true
所以试图点击选项:
cabinSelect.findElement( By.xpath("option[.='Economy']") )
.click();
失败了:
ElementNotVisibleException: Element is not currently visible and so may not be interacted with
我一直在用Selenium IDE进行更多研究。似乎每次选择下拉列表中的项目时,它都具有不同的id,形式为ui-selectmenu-item- nnn 。但是,如果我列出所有元素,请在下拉列表后立即使用选择器
By.cssSelector("*[id^='ui-selectmenu-item-']")
我需要的3不在列表中。 Selenium IDE建议我也可以使用像
这样的东西//a[contains(text(),'Economy')]
识别元素但使用
生成列表By.xpath("//a[contains(text(),'Economy')]")
也无法返回我需要的元素。
是否存在Selenium无法看到的元素?
答案 0 :(得分:1)
此网站的关键似乎是使用select2构建下拉列表,您无法使用传统方法进行选择。
这是工作脚本
public class TestSelenium {
static WebDriver driver;
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "res/chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--test-type");
WebDriver driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.lan.com/es_co/sitio_personas/index.html");
try {
Thread.sleep(5000);
} catch (Exception e) {
}
driver.findElement(By.name("campoOrigen")).sendKeys("SGN");
driver.findElement(By.xpath("//a[contains(text(),'SGN')]")).click();
driver.findElement(By.name("campoDestino")).sendKeys("BOG");
driver.findElement(By.xpath("//a[contains(text(),'BOG')]")).click();
driver.findElement(By.name("campoFechaIda")).click();
driver.findElement(By.xpath("//a[text()='22']")).click();
driver.findElement(By.name("campoFechaVuelta")).click();
driver.findElement(By.xpath("//a[text()='28']")).click();
driver.findElement(
By.xpath("//div[contains(@class,'campoComboCabinas')]//span[@class='ui-selectmenu-status']"))
.click();
driver.findElement(By.xpath("//div[contains(@class, 'ui-selectmenu-open')]//a[text()='Premium Economy']")).click();
try {
Thread.sleep(5000);
} catch (Exception e) {
}
driver.quit();
}
}
答案 1 :(得分:0)
使用官方方式从ddl中选择如下:
Select dropdownlist = new Select(driver.findElement(By.id("your-selector")));
dropdownlist.selectByVisibleText("Economy");
答案 2 :(得分:0)
在我的情况下,此代码正常运行:
WebElement element = driver.findElement(By.cssSelector("your_selector"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);