我已经搜索了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上
答案 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链接,它会点击它。所以我指的是那个点击。