预期' id'默认鼠标映射到其子类型未定义的InputState,got:pointerMove

时间:2017-04-21 14:15:37

标签: java selenium selenium-webdriver

我已经搜索了Stackoverflow这个,我找到了一个上一篇文章,但没有帮助,因为代码建议在C

        WebElement termsElement = driver.findElement(By.xpath("//label[@for='terms']"));
        WebElement marketingElement = driver.findElement(By.xpath("//label[@for='allowMarketing']"));
        System.out.println(termsElement.isDisplayed() + " & " +  marketingElement.isDisplayed());
        new Actions(driver).moveToElement(termsElement).click().perform();
        new Actions(driver).moveToElement(marketingElement).click().perform();

这会在标题中抛出指针异常。 我已经尝试过element.click();然而它没有采取任何行动,所以我不得不求助于使用动作来指挥鼠标。

System.out.println打印' true& true',因此元素在视图中可见

相关DOM

<div class="checkbox small">
<input id="terms" class="ng-pristine ng-untouched ng-valid ng-empty" name="terms" ng-model="checkout.TandCsAccepted" ng-click="ClickTsAndCs()" type="checkbox">
<label for="terms">
</div>
<h4 class="margin--top-2x">E-mail Marketing Preferences</h4>
<p></p>
<div class="checkbox small">
<input id="allowMarketing" class="ng-pristine ng-untouched ng-valid ng-empty" value="" name="allowMarketing" ng-model="checkout.AllowMarketing" type="checkbox">
<label for="allowMarketing"> I would like to receive emails, newsletters and offers </label>
</div>

为什么会抛出此异常?我该如何避免呢?我试图让它同时勾选输入框。 inputelement.click();由于一些奇怪的原因不起作用。这在Chrome上完全正常,而不是在Firefox上

2 个答案:

答案 0 :(得分:1)

以下是一个简单的代码供您尝试:

    WebElement termsElement = driver.findElement(By.xpath("//input[@id='terms']"));
    WebElement marketingElement = driver.findElement(By.xpath("//input[@id='allowMarketing']"));
    System.out.println(termsElement.isDisplayed() + " & " +  marketingElement.isDisplayed());
    new Actions(driver).moveToElement(termsElement).click().build().perform();
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    new Actions(driver).moveToElement(marketingElement).click().build().perform();
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

让我知道它是否适合你。

答案 1 :(得分:0)

        WebElement termsElement = driver.findElement(By.xpath("//label[@for='terms']"));
        WebElement marketingElement = driver.findElement(By.xpath("//label[@for='allowMarketing']"));
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("payforitems")));
        int getpoint = ((termsElement.getSize().width)/2) -1;
        new Actions(driver).moveToElement(termsElement, getpoint ,0).click()
                           .moveToElement(marketingElement, getpoint ,0).click()
                           .build()
                           .perform();
                           sleep(1);
        driver.findElement(By.id("payforitems")).click();

对于任何发现此事的人。

问题在于Firefox有一个处理Actions的问题,某个版本的firefox驱动程序在调用第一个Action之后失败(之前在另一个测试方法中被调用),当我删除它时,并重新编写代码为了不使用动作,我做了一个新的动作调用并将所有动作放入其中并执行它,这只是意味着我以后不能再使用动作了。

我宣布元素宽度并点击标签侧面的原因是因为中间是一个href链接,它会点击它。所以我指的是那个点击。