以下代码忽略第二个复选框单击。谁知道为什么以及如何解决?在最后一行设置断点以查看仍然选中复选框...
private final static String CHECKBOXBUTTON_URL = "https://www.w3schools.com/html/tryit.asp?filename=tryhtml_Checkbox";
private final static String RESULT_IFRAME = "iframeResult";
private final static By CHECKBOX = By.xpath("/html/body/form/input[2]");
@Test
public void checkbox()
{
System.setProperty("webdriver.edge.driver", "MicrosoftWebDriver.exe");
WebDriver driver = new EdgeDriver();
FluentWait<WebDriver> wait = new WebDriverWait(driver, 0);
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
wait.withTimeout(Duration.ofSeconds(10)).pollingEvery(Duration.ofMillis(200));
driver.get(CHECKBOXBUTTON_URL);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(RESULT_IFRAME));
driver.findElement(CHECKBOX).click();
wait.until(ExpectedConditions.elementToBeSelected(CHECKBOX));
driver.findElement(CHECKBOX).click(); // this click is ignored
driver.quit(); // break here; checkbox is still checked (but shouldn't)...
}
答案 0 :(得分:1)
由于浏览器的动画时间间隔在框中显示复选标记,因此会被忽略。
driver.findElement(CHECKBOX).click();
wait.until(ExpectedConditions.elementToBeSelected(CHECKBOX));
//Something can be coded here
driver.findElement(CHECKBOX).click(); // this click is ignored
您可以选择以下两种陈述中的任何一种。
添加1或2秒的等待时间。使用Thread.sleep(2000)
。这将允许传递动画稳定下来。
在目标复选框上使用isSelected()
方法,以确定它是否真的被选中。如果选中则该方法返回true,否则返回false。
答案 1 :(得分:0)
您需要注意以下几个事实:
FluentWait :而不是使用FluentWait<WebDriver>
使用WebDriverWait()
,而是使用 WebDriver >> FluentWait 专门定制3> em>实例,直到并且除非它是绝对必要的。
您需要使用 timeOutInSeconds 所需的值inter际配置 WebDriverWait ,例如5,10,15但不是 0 。
pageLoadTimeout():尝试避免配置pageLoadTimeout()
,直到测试规范明确提及相同内容。
在switch()
ExpectedConditions
elementToBeSelected()
elementToBeClickable()
之后new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@name='vehicle' and @value='Car']"))).click();
等待import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Checkbox_Click {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "C:\\path\\to\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.w3schools.com/html/tryit.asp?filename=tryhtml_Checkbox");
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("iframeResult"));
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@name='vehicle' and @value='Car']"))).click();
}
}
,如下所示:
|
|--------python_scripts
| |
| |
| |------- a.py
|
|--------lib
|
|-------b.py
您的优化代码块如下:
oVizFrame.setVizProperties({
plotArea: {
window: {
start: "firstDataPoint",
end: "lastDataPoint"
},
dataLabel: {
formatString:ChartFormatter.DefaultPattern.SHORTFLOAT_MFD2,
visible: false
}
},
valueAxis: {
visible: true,
label: {
formatString:ChartFormatter.DefaultPattern.SHORTFLOAT
},
title: {
visible: false
}
},
valueAxis2: {
visible: true,
label: {
formatString:ChartFormatter.DefaultPattern.SHORTFLOAT
},
title: {
visible: false
}
},
timeAxis: {
title: {
visible: false
},
interval : {
unit : ''
}
},
title: {
visible: false
},
interaction: {
syncValueAxis: false
}
});
浏览器快照:
答案 2 :(得分:0)
您可以使用索引切换帧并使用它移动到第二帧,然后选中复选框。
exception