迁移角度6版本后,NgWebDriver无法单击元素

时间:2019-03-26 15:07:34

标签: c# angular selenium automation protractor

我正在使用的当前配置:

  

Chrome- 73   量角器-0.12.0   Nunit-3.11.0   Chromedriver-3.141.0   Windows 10

在Angular 6上进行迁移后,我的测试框架没有单击任何元素。我使用NgWebDriver

页面

<div class="home-page--sections">
<!---->
<a id="menuItemImgBtnTransactions" class="home-page--section" href="/sales/transactions">

代码

 NgWebDriver driver;
 public HomePage(IWebDriver driver)
 {
    this.driver = (NgWebDriver)driver;
 }
 By transactionsTab = By.Id("menuItemImgBtnTransactions");


//driver.WaitForAngular(); // I use wait PageLoad,AsynchronousJavaScript waiters
IWebElement transaction = driver.FindElement(transactionsTab);
transaction.Click();

我使用通常的WD登陆(登录)页面,它正常工作,但是当我尝试使用ng驱动程序转到事务页面时(很多测试都是使用ngdriver =我的框架编写的)

我正在获取OpenQA.Selenium.WebDriverTimeoutException 会话信息:chrome = 73.0.3683.86驱动程序信息:chromedriver = 73.0.3683.68()

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

查看您的代码:

By transactionsTab = By.Id("menuItemImgBtnTransactions");


//driver.WaitForAngular(); // I use wait PageLoad,AsynchronousJavaScript waiters
driver.FindElement(transaction));
transaction.Click();

您已将定位符定义为transactionsTab,但是您正在将transaction传递到FindElement()函数中。不确定为什么将定位器定义为变量,但是如果使用该策略,以下方法应该起作用:

By transactionsTab = By.Id("menuItemImgBtnTransactions");


//driver.WaitForAngular(); // I use wait PageLoad,AsynchronousJavaScript waiters
driver.FindElement(transactionsTab)).Click();

您也可以一行完成:

driver.FindElement(By.Id(“menuItemImgBtnTransactions”)).Click();

或者,如果您想重用该WebElement,我可以这样做:

IWebElement transactions = driver.FindElement(By.Id(“menuItemImgBtnTransactions));
transactions.Click();

您可以使用transactions元素执行任何操作。

答案 1 :(得分:0)

在常规click()失败的情况下,JavaScript单击可以很好地在角度上使用:使用C#

var jsdriver = driver as IJavaScriptExecutor;

jsdriver?.ExecuteScript("arguments[0].click();", element);