C# 如何使用selenium elements C进行嵌套#

C# 如何使用selenium elements C进行嵌套#,c#,selenium,selenium-webdriver,winappdriver,C#,Selenium,Selenium Webdriver,Winappdriver,我已经使用Selenium进行了许多测试。我很好奇我的筑巢是否正确。我不确定是否有更好的方法,如果有,我很乐意听到 此时,我在启动时使用WinApp驱动程序打开PowerPoint会话。然后在嵌套时,我执行以下操作。这里我找到了一个叫做链接的元素。元素树中链接的子元素是更新等 var linking = session.FindElementByName("Linking"); var update = linking.FindElementByName("Update");// within

我已经使用
Selenium
进行了许多测试。我很好奇我的筑巢是否正确。我不确定是否有更好的方法,如果有,我很乐意听到

此时,我在启动时使用
WinApp
驱动程序打开PowerPoint会话。然后在嵌套时,我执行以下操作。这里我找到了一个叫做链接的元素。元素树中链接的子元素是更新等

var linking = session.FindElementByName("Linking");
var update = linking.FindElementByName("Update");// within the linking element there is an update button
update.Click();
session.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
var all =update.FindElementByName("All");// within the update element there is a dropdown menu with an "All" button
session.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
all.Click();

在一篇评论中,您提到代码的问题是,除非您进入睡眠状态,否则所有的
都是不可点击的

使用显式等待。比如:

new WebDriverWait(session, TimeSpan.FromSeconds(10))
    .Until(ExpectedConditions.ElementTo‌​BeClickable(update.F‌​indElementByName("Al‌​l"))

对于WinApp驱动程序,情况可能有点不同,但这是基本的想法。

您对此有问题吗?如果没有,我想你可以放松一下,它看起来很好:)如果这没有问题,这种类型的问题可能更适合于代码审阅交换。需要注意的是,在使用
隐式
等待时要非常小心,它们很容易导致细微的错误,因为每次更改它们时都必须将其更改回默认值,以保持预期的行为。@mrfreester感谢您查看我的代码。我有一些问题。它可以找到并定位“All”元素,但除非我在单击之前先休眠,否则不会单击它。我不喜欢在这种情况下使用sleep属性。您会推荐什么来代替隐式等待设置了隐式等待
,当您尝试在测试中永远找到一个
元素
时,它会等待很长时间直到找到它,而不是等待它单击它。页面可能仍在更改,或者元素不可见,等等。。。改为使用显式等待。类似于
newwebdriverwait(session,TimeSpan.FromSeconds(10))到(ExpectedConditions.elementtobelickable(update.FindElementByName(“All”))
。如果您将问题添加到问题中,并且效果良好,我将添加作为答案。WinApp的情况可能会有所不同,但这是基本思路。以下是一些您可以使用的方法,尽管您也可以使用自定义条件来处理
WebDriverWait