Java 预期';id';要映射到子类型未定义的InputState的默认鼠标,get:pointerMove

Java 预期';id';要映射到子类型未定义的InputState的默认鼠标,get:pointerMove,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我在Stackoverflow中搜索了这篇文章,找到了以前的一篇文章,但没有任何帮助,因为代码是用C编写的 WebElement termsElement = driver.findElement(By.xpath("//label[@for='terms']")); WebElement marketingElement = driver.findElement(By.xpath("//label[@for='allowMarketing']"));

我在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();
这会在标题中引发指针异常。 我尝试了元素。单击();但是它没有任何动作,所以我不得不求助于使用动作来引导鼠标

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上不行。这里有一个简单的代码供您尝试:

    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);
让我知道它是否适合你

        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在处理操作方面存在问题,Firefox驱动程序的某个版本在调用第一个操作后失败(之前在另一个测试方法中调用过),当我删除该操作,并将代码修改为“未使用的操作”时,我进行了一个新的操作调用,并将所有操作放入其中并执行了该操作,这只是意味着我以后不能再做任何动作了


我声明元素宽度并点击标签边的原因是因为中间是一个HREF链接,它会点击它。所以我把点击从那个方向移开

您希望执行的具体步骤是什么?提供相关的HTML DOM。为什么要处理操作?为什么不仅仅是
termsElement.单击()
marketingElement.单击()
?编辑-刚刚看到你的更新。我猜您要单击的是输入,而不是标签或diveven@mrfreester出于某些奇怪的原因,这不起作用,它不会抛出异常,它只是不做任何事情。您的编辑是。@Dev我已经用DOM和更多信息编辑了这个问题。感谢这
xpath
,并摆脱以下操作:
//label[@for='terms']/concenter::div[contains(@class',checkbox')]
//label[@for='terms']/concenter::div[contains(@class',checkbox')]/input
,并让我知道发生了什么。为了澄清,这是唯一一个id为的元素。是的,返回'true&true',getElements和打印列表的大小,两者都返回1。请检查我更新的代码并告诉我状态。不,您试图单击不应该单击的标签。相反,您应该尝试单击该复选框。这是不同的。我的目的是建议您对自己的程序进行简单的调整。我不编码火箭科学:)对不起,代码没有抛出错误,但它仍然像它所做的那样继续。但勾选框无法启用。按下标签也应勾选开发人员设计的方框。