【问题标题】:NgWebDriver can't click on element after angular 6 version migrated迁移 Angular 6 版本后,NgWebDriver 无法单击元素
【发布时间】:2019-08-17 00:42:45
【问题描述】:

我正在使用的当前配置:

铬- 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()

有什么想法吗?

【问题讨论】:

  • 所以你使用的是 NgWebdriver Protractor?为什么?我认为你应该只使用这两个中的一个(如果是我,我肯定会选择 Protractor)。

标签: c# angular selenium automation protractor


【解决方案1】:

查看您的代码:

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. driver.FindElement(transactionsTab )); 的末尾有一个空格和一个额外的“)”,这是行不通的。 2. 当你使用driver.FindElement() 时,它应该被赋值给一个变量或者附加.Click() 否则它不会真正做任何事情。 3. 你还在最后一行使用transactions 没有定义它。
  • 我编辑了我的代码,因此这不是问题。我/我遇到同样的错误,我无法使用量角器驱动程序点击页面
  • 这段代码解决了我的问题:private const int waitSeconds = 50;ngDriver = new NgWebDriver(driver);ngDriver.IgnoreSynchronization = true;ngDriver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(waitSeconds);ngDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(waitSeconds);ngDriver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(waitSeconds);
  • 它对我有帮助 IJavaScriptExecutor js = (IJavaScriptExecutor)driver; js.ExecuteAsyncScript("window.setTimeout(arguments[arguments.length - 1], 1000);");
【解决方案2】:

JavaScript 点击在常规click() 失败的角度上效果很好:使用C#

var jsdriver = driver as IJavaScriptExecutor;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2019-02-24
    • 2020-02-24
    • 2019-03-26
    • 2018-10-18
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多