使用Selenium Webdriver(C#)我不时会收到下一个错误:
System.InvalidOperationException:未知错误:无法从超时获取自动化扩展:超时从渲染器接收消息:-3.959(会话信息:chrome = 37.0.2062.120)(驱动程序信息:chromedriver = 2.10.267521,platform = Windows NT 6.2 x86_64)
出现这种错误的方式:
OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)位于c:\ Projects\webdriver\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:第1048行OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute,Dictionary "2个参数"在c:\ Projects\webdriver\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:第865行的AutomatedTests.DriverCover..ctor(IWebDriver驱动程序)
所以,它发生在下一段代码中:
public class DriverCover
{
public DriverCover(IWebDriver driver)
{
_driver = driver;
_driver.Manage().Window.Maximize(); //There is my mistake
}
private readonly IWebDriver _driver;
}
Run Code Online (Sandbox Code Playgroud)
我使用这个类作为PageObject类的基类,我使用PageFactory来初始化网页的元素.
我有chromedriver v.2.10和Google Chrome v.37.0.2062.120 m
另外:在同一行我得到了另一个错误:
OpenQA.Selenium.WebDriverException:对远程WebDriver服务器的URL请求
http://localhost:62407/session/021e05cd4c89abedb2abc77342b3bd7c/window/current/maximize在60秒后超时.----> System.Net.WebException:该操作在c:\ Projects\webdriver\dotnet\src\webdriver\Remote\HttpCommandExecutor.cs:line中的OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest请求)已超时. 152,OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(命令commandToExecute)位于c:\ Projects\webdriver\dotnet\src\webdriver\Remote\DriverServiceCommandExecutor.cs:第73行,OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute) ,字典`2参数)在c:\ Projects\webdriver\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:877行AutomatedTests.DriverCover..ctor(IWebDriver驱动程序)
在NUnit v.<3.0中有TestContext类,并且有一个属性可以告诉我们先前运行的测试的状态.
要访问我们可以使用的属性 TestContext.CurrentContext.Result.Status
现在在NUnit 3.0中没有属性Status!所以我的所有测试都需要改变.
我的问题是下一个:是否有可能在NUnit 3.0中获得测试状态,因为它可以在以前的版本中进行?
有趣的事情:有类TestStatus具有属性:Passed, Failed等等,我们用它来比较当前状态.这个类出现在NUnit 3.0中!
我的代码:
if (TestContext.CurrentContext.Result.Status == TestStatus.Failed)
{
//Be happy if it works)
}
Run Code Online (Sandbox Code Playgroud) 当我点击一个按钮时,它会显示一个带有另一个按钮的表单,我想点击其中一个按钮.这是一个视频(真的很短),请观看http://screencast.com/t/zyliSemW1s1
所以我点击"购买门票"按钮就像这样:
button.Click();
Run Code Online (Sandbox Code Playgroud)
然后我等待下一个按钮可点击.
我用下一个代码:
WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(15));
IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(myButton));
Run Code Online (Sandbox Code Playgroud)
之后我点击我等待的按钮:
element.Click();
Run Code Online (Sandbox Code Playgroud)
而且我收到错误:此时元素无法点击.
据我所知,方法ExpectedConditions.ElementToBeClickable()等待2个条件:元素可见,元素启用.
当我在点击第二个按钮之前使用Thread.Sleep(3000)时,代码可以工作并且按钮是可点击的.
我看到类似的问题,解决方案是等待这个按钮的处理程序:Selenium Wait不等待Element可点击
但是,如果我不知道是什么处理它该怎么办?我认为它由jQuery处理,我使用下一个代码等待它停止执行:
var ajaxIsComplete = (bool)
((IJavaScriptExecutor)Driver).ExecuteScript("return jQuery.active == 0");
Run Code Online (Sandbox Code Playgroud)
如果它返回"false",我等待并再次检查.
但它仍然无效.
所以现在我的流程是这样的:
请大家告诉我我的流程有什么问题,以及如何正确管理它.
更新:我正在添加按钮的HTML代码:
我点击这个:
<button class="btn btn-warning play-now" name="button" type="submit">Buy Tickets</button>
Run Code Online (Sandbox Code Playgroud)
等待这一个:
<img alt="Credit Card" class="merchant" src="https://numgames-production.s3.amazonaws.com/uploads/merchant/image/21/CC_Offline.png?AWSAccessKeyId=AKIAJ2Q64HPERGHAJJUA&Expires=1470984765&Signature=Qj%2BFSQ3ElctkY6KTMfzp%2FedPjPo%3D">
Run Code Online (Sandbox Code Playgroud) 我正在使用带有Interceptor扩展的Postman来执行POST请求.
我的请求包含一个Origin头,以避免CORS错误.的Content-Type就是application/x-www-form-urlencoded和我收到的JSON,所以我不得不添加Accept header与价值application/json.
我调用的API也要我添加Referer标头,所以我这样做.当我发送请求时,Accept header它不在原始请求中.当我删除时Referer header,Accept header显示在原始请求中.
这是Postman/Interceptor中的一个错误,还是我在针对发送http请求的"规则"做些什么?
在NUnit 3.0之前,我使用下一个参数来包含要执行的测试类别: /include:"name"
现在在NUnit 3.0中,写作似乎有所不同 - 根据这个:https://github.com/nunit/dev/wiki/Command-Line-Options
我必须使用类似的东西:-include=name但在我看来,正确的选择是--include=name因为我--workers以相同的方式编写其他参数并且它们起作用.
问题是当我使用--include参数时我得到错误:( "Invalid argument: --include=Selenium"Jenkins控制台显示我这个错误).
我究竟做错了什么?
我使用ReSharper 10和NUnit 3.
当我在Visual Studio中运行我的测试时,一切都很好.但是,当我选择ReSharper的一个测试和运行它或它的调试则没有选择的测试运行,但所有的测试.
如果我在Resharper - Unit Tests - Unit Tests窗口中选择测试或者如果我在代码中选择它,则会发生同样的情况(单击测试左侧的图标:http://prntscr.com/a1clt1
我的所有方法都标有[Test]属性或[TestCase()]属性
它是ReSharper,NUnit的错误还是可以在设置中设置?
谢谢你的帮助.
我正在尝试使用 Selenium Webdriver 或 Javascript 检查复选框的状态,但经过大量研究后我仍然无法做到。
我的问题是:复选框没有“checked”属性:
<input type="checkbox" name="site[new_sign_up]" id="site_new_sign_up" value="1">
Run Code Online (Sandbox Code Playgroud)
对于常规的普通复选框,我使用下一个字符串来检测复选框是否被选中:
if (checkbox.GetAttribute("checked") != null && checkbox.GetAttribute("checked").Equals("true"))
Run Code Online (Sandbox Code Playgroud)
我知道可以用JS来完成:
$get("isAgeSelected").checked == true
Run Code Online (Sandbox Code Playgroud)
但我仍然无法做到这一点,因为我的复选框没有“选中”属性。
如果使用硒,我检查元素的“选定”属性,它也不会告诉我复选框状态的真相。
关于如何做有什么建议吗?提前致谢。
我试图以编程方式第二次运行测试,它存在于同一个项目中.
因为如果SetUp测试失败,那么测试和SetUp将再次运行.
我使用Selenium Webdriver来运行测试,然后很多都有SetUp预操作.例如:预先行动是购买一张票,然后运行一组测试以检查是否一切正常.
通常我的SetUp预操作失败(发生错误),然后没有运行测试.我想给他们第二个改变,就是再次运行它们.
一个可能对我有用的好解决方案是这个问题,但它需要NUnit 3.
NUnit.CoreNUnit 3中没有包,因此解决方案显示了很多错误.如果我的测试方法放在同一个项目中,我也不确定是否必须使用它(所以也许我不需要加载程序集).
如果此方法放在同一个项目中,如何从代码运行测试方法的任何想法?
我必须检查是否选择了一个元素。我唯一可以做到的方法是观察是否已向该元素添加了一个额外的“选择的” css类。
所以,我的元素看起来像:
<div class="b-wide-option" data-bind="css: { selected: IsSelected }, click: Select, attr: { id: Id }, event: { mouseover: OnMouseOver, mouseout: OnMouseOut, touchstart: OnTouchClick }" id="2">
Run Code Online (Sandbox Code Playgroud)
当我选择它时,它看起来像:
<div class="b-wide-option selected" data-bind="css: { selected: IsSelected }, click: Select, attr: { id: Id }, event: { mouseover: OnMouseOver, mouseout: OnMouseOut, touchstart: OnTouchClick }" id="2">
Run Code Online (Sandbox Code Playgroud)
添加了CSS类“已选择”。我需要检查是否已添加。我使用下一个代码:
string classes = element.GetAttribute("class");
Run Code Online (Sandbox Code Playgroud)
但是不幸的是,它仅返回第一类“ b-wide-option”,而没有返回我实际需要的第二类。
我已经将Selenium Webdriver C#更新到版本2.50.0,不幸的是,我也更新ChromeDriver到版本2.21,然后遇到了问题。我倾向于认为它与ChromeDriverSelenium 的新版本有关,但我也不确定Selenium的新版本。
我使用了下一段代码来运行移动仿真:
var mobileEmulation = new Dictionary<string, string>
{
{"deviceName", device}
};
ChromeOptions options = new ChromeOptions();
options.AddAdditionalCapability("mobileEmulation", mobileEmulation);
Run Code Online (Sandbox Code Playgroud)
而且效果很好。
现在在下一个字符串上:
options.AddAdditionalCapability("mobileEmulation", mobileEmulation);
Run Code Online (Sandbox Code Playgroud)
它显示了下一个错误:
mobileEmulation功能已经存在一个选项。请改用它。参数名称:
capabilityName
那么,该方法中的第一个参数应该是什么?
c# ×4
nunit ×3
nunit-3.0 ×3
selenium ×2
webdriver ×2
ajax ×1
automation ×1
checkbox ×1
css ×1
interceptor ×1
javascript ×1
jquery ×1
json ×1
postman ×1
referer ×1
resharper ×1
testing ×1
unit-testing ×1