2017-04-21 30 views
-1

我已经在这个搜索Stackoverflow,我找到了以前的帖子,但没有帮助,因为代码建议是在C预期'ID'默认鼠标将被映射到其子类型未定义的InputState,得到:pointerMove

 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 '真&真',所以元素是可见的,鉴于

相关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

你想要执行什么样的确切步骤?提供相关的HTML DOM。 – DebanjanB

+1

为什么要处理行为?为什么不只是'termsElement.click()'和'marketingElement.click()'?编辑 - 只看到你的更新。我的猜测是你想单击输入,而不是标签或div,即使 – mrfreester

+0

@mrfreester这不起作用的原因有些奇怪,它不会抛出异常,它只是没有做任何事情。是的,你的编辑。 –

回答

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的问题,当第一个Action被调用(它在之前的另一个测试方法中被调用)之后,某个版本的Firefox驱动程序失败,并且重写了代码未使用的动作,我做了一个新的动作调用,并将所有动作放入并执行,这意味着稍后我不能再使用任何动作。

我声明元素的宽度并点击标签的一侧的原因是因为中间是一个href链接,它会点击它。所以我正在指引点击。

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); 

让我知道它是否适合你。

+0

中的错误抛出ElementNotVisible。为了澄清,这是唯一具有该ID的元素。 –

+0

你是否使用我的代码在Sysout上得到了正确的结果? – DebanjanB

+0

是的,返回'true&true',甚至没有getElements并打印列表的大小,并且它们都返回1。 –

相关问题