忽略第二个复选框单击

时间:2018-05-27 23:53:22

标签: java selenium selenium-webdriver webdriver selenium-edgedriver

以下代码忽略第二个复选框单击。谁知道为什么以及如何解决?在最后一行设置断点以查看仍然选中复选框...

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)...
}

3 个答案:

答案 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. 添加1或2秒的等待时间。使用Thread.sleep(2000)。这将允许传递动画稳定下来。

  2. 在目标复选框上使用isSelected()方法,以确定它是否真的被选中。如果选中则该方法返回true,否则返回false。

答案 1 :(得分:0)

您需要注意以下几个事实:

  • FluentWait :而不是使用FluentWait<WebDriver>使用WebDriverWait(),而是使用 WebDriver > FluentWait 专门定制 em>实例,直到并且除非它是绝对必要的。

  • 您需要使用 timeOutInSeconds 所需的值inter际配置 WebDriverWait ,例如5,10,15但不是 0

  • pageLoadTimeout():尝试避免配置pageLoadTimeout(),直到测试规范明确提及相同内容。

    < / LI>
  • 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
        }
    });
    
  • 浏览器快照:

Browser_Snap_Second_Select

答案 2 :(得分:0)

您可以使用索引切换帧并使用它移动到第二帧,然后选中复选框。

exception