使用Selenium来检查由javascript

时间:2019-07-08 15:37:08

标签: javascript selenium

使用Selenium和Java进行测试自动化。

有一个页面必须与IE(而不是Chrome)一起运行。我相信它也使用Coldfusion。无论如何,单击箭头会弹出复选框菜单。但是,此菜单不是普通的html,而是Java脚本(请参见下文)。这只是javascript函数的一部分。

我需要选择一个选项。 基本上,没有Direct。我打印页面源,然后尝试做一个(driver.findElements(By.xpath(“ // input”))返回0个元素。因此,我不确定如何选择一个框。

使用大量的String操作,我可以找到选项的索引(通过查找省略号;“)并进行一些替换。我可以打开菜单,但是现在呢?建议的一件事是做一个动作。 sendKeys(Keys.ARROWDOWN)根据列表中选项的位置,但是向下箭头而不是向下列表中的项目,而是移动滚动条。

是否有人遇到过类似问题或有建议? (也许使用javascript执行程序?)

<SCRIPT defer>

var strInnerHTML = '<div>';
strInnerHTML += '<form action="" onsubmit="return false;">';
strInnerHTML += '<span class="checkboxdropdown">';
strInnerHTML += '<input  type=\"checkbox\" id=\"_78\" name=\"cbusers\" 
value=\"78\"><label for=\"_78\" HIDEFOCUS=\"true\" style=\"white- 
space:nowrap; text-overflow:ellipsis;\">Option 1</label><br> 
<input  type=\"checkbox\" id=\"_90\" name=\"cbusers\" value=\"90\"><label 
for=\"_90\" HIDEFOCUS=\"true\" style=\"white-space:nowrap; text- 
overflow:ellipsis;\">Option 2</label><br><input  
type=\"checkbox\" id=\"_139\" name=\"cbusers\" value=\"139\"><label 
for=\"_139\" HIDEFOCUS=\"true\" style=\"white-space:nowrap; text- 
overflow:ellipsis;\">Option 3</label><br>

2 个答案:

答案 0 :(得分:0)

在JavaScript中,硒库中有一个名为“ until”的部分,因此Java中可能存在类似的内容。

在JS中:

(async ()=>{
    let element = driver.findElement({id: "example"});

    return await driver.wait(await until.elementIsVisible(element)).then(async ()=>{
        return await element.click();
    });    
})();

如果您等到元素显示在页面上之后才开始与它们进行交互,那么您可能会有更多的运气。

对不起,我仍然无法在Java中帮忙

答案 1 :(得分:0)

按名称:

List<WebElement> checkbox = driver.findElements(By.name("cbusers"));
checkbox.get(0).click();

通过cssSelector:

List<WebElement> checkbox = driver.findElements(By.cssSelector("input[type='checkbox']"));
checkbox.get(0).click();

通过tagName:

List<WebElement> checkbox = driver.findElements(By.tagName("label"));
checkbox.get(0).click();

使用JavaScript:

WebElement checkbox = driver.findElement(By.name("cbusers"));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", checkbox );