У меня есть следующие драйверы браузера:
public IWebDriver Browser { get; }
public NgWebDriver NgBrowser { get; }
Когда я пытаюсь найти элемент с помощью селектора XPath, если Angular отсутствует, он не будет работать, если я использую NgBrowser
:
var byXpath = By.XPath(exp);
var link = NgBrowser.FindElement(byXpath);
Но если я попытаюсь найти его с помощью Browser
и Angular присутствует, он не найдет его:
var byXpath = By.XPath(exp);
var link = Browser.FindElement(byXpath);
Должен ли я просто обернуть вызов NgBrowser
в try...catch
иповторная попытка с Browser
, если он выдает?Или есть более простой, более прямой метод?Возможно, что-то со встроенным переключением при сбое?
.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="Protractor" Version="0.12.0" />
<PackageReference Include="Selenium.Support" Version="3.141.0" />
<PackageReference Include="Selenium.WebDriver" Version="3.141.0" />
<PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="2.46.0" />
<PackageReference Include="specflow" Version="3.0.199" />
<PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.0.199" />
<PackageReference Include="SpecFlow.MsTest" Version="3.0.199" />
<PackageReference Include="MSTest.TestFramework" Version="2.0.0-build-20190430-01" />
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0-build-20190430-01" />
</ItemGroup>
</Project>
Лучшее, что у меня есть сейчас, это:
[Given(@"I go to url (.*)")]
public void GoToUrl(string url)
{
NgBrowser
.Navigate()
.GoToUrl(url, false);
}
Пока это решаетпроблема обнаружения Angular во время навигации по страницам, она не отвечает на вопрос этого поста;А именно, что простое обнаружение Angular отдельно от выполнения операции (особенно FindElement) представляется невозможным.