我使用了代码:-
do {
let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: AnyObject]
if let sub = json["sub"] as? [String: AnyObject], let lastName = sub["lastname"] {
print(lastName)
}
} catch {
print("error")
}
但是有人告诉我这不是最佳实践,很多时候都行不通。
HTML:
public Boolean RetryingFindClick(By by)
{
Boolean result = false;
int attempts = 0;
while (attempts < 4)
{
try
{
BrowserHelper.WebDriver.FindElement(by).Click();
result = true;
break;
}
catch (Exception e)
{
Console.WriteLine(e);
}
attempts++;
}
return result;
}
答案 0 :(得分:3)
您可以使用显式等待条件来找到以下元素,它将等待直到在给定时间内该元素可单击为止。如果该元素未附加到DOM /在指定时间内不可单击,那么它将抛出autocomplete=off
。因此,您可以在等待条件中指定所需的时间。
NuGet程序包:
TimeoutException
代码:
DotNetSeleniumExtras.WaitHelpers
编辑:
请在您的测试方法中添加click操作(从RetryingFindClick方法中删除)
public Boolean RetryingFindClick(By by){
try
{
var wait = new WebDriverWait(BrowserHelper.WebDriver, TimeSpan.FromSeconds(20));
wait.Until(ExpectedConditions.ElementToBeClickable(by))
}
catch (Exception e)
{
Console.WriteLine(e);
return false;//Element is not found until the specified time
}
return true;
}