我有一个用F#编写的selenium UI测试(使用canopy selenium nuget包)。我有一个定义页面选择器和辅助函数的模块。 页面模块由测试模块调用。在测试模块中,我正在调用一个名为' handlemobimodals()'的函数,该函数运行四个子函数(if / else代码块),查找页面上是否存在元素并单击它,如果它存在。
我面临的问题是,当' handlemobododals()'函数在测试中第二次被调用,我得到一个Stack Overflow Exception(WebDriver Process由于StackOverflowException而终止),就在调用它的第一个子函数之后。
该函数第一次完全运行(在测试早期从另一个函数间接调用),但在测试中直接调用时第二次失败。我对F#很陌生,我无法弄清楚我在测试中如何导致递归,就像stackoverflow异常所示。
非常感谢任何见解。
来自页面模块的代码段
module some_page
let isOKGotItDisplayed () =
isDisplayed <| "div.action-button.dismiss-overlay"
let clickOKGotit() =
if isOKGotItDisplayed() = true then
click "OK, GOT IT"
describe "OK, Got It clicked"
else describe "Got nothing"
let isGoToSearchDisplayed() =
isDisplayed <| "button:contains('Go to Search')"
let clickGoToSearch() =
if isGoToSearchDisplayed() = true then
click "button:contains('Go to Search')"
describe "go search button clicked"
else describe "Got nothing"
let isSkipDisplayed() =
isDisplayed <| "#uploadPhotos > div.continue.skip"
let clickSkip() =
if isSkipDisplayed() = true then
click "Skip"
describe "Skip link clicked"
else describe "Got nothing"
let mobiOkayGotItDisplayed () =
isDisplayed <| "Okay, got it"
let mobiOKGotit() =
if mobiOkayGotItDisplayed() = true then
click "Okay, got it"
describe "Okay, got it"
else describe "Got nothing"
let handleMobiModals() =
clickSkip()
clickOKGotit()
clickGoToSearch()
mobiOKGotit()
loginForPathAs user =
username << "somename"
paswword << "somepassword"
handleMobiModals()
来自测试模块的片段(请注意,在LoginforPathAs函数中调用handleMobiModals函数的第一个实例,该函数在同一页面定义模块中定义):
module_sometest
open some_page
"Test 001: Log in and do something" &&& fun _ ->
newBrowser platform
loginForPathAs user1
displayed quicknoteSendButton
click quicknoteSendButton
handleMobiModals ()
displayed "Subscribe"
注意:为了简单和清晰起见,编辑了片段。
答案 0 :(得分:1)
这不是一个直接的答案,但我相信这将有助于更容易地找到问题。我确实注意到了调试这个问题有点困难的事情。您正在从另一个函数调用多个函数,并从测试中调用此单个函数。将这些功能拆分为单独的测试并将测试更改为WIP模式应该有助于查明您的问题。在一次测试中有很多可能的失败点。
例如,您可以在Canopy的上下文中使用之前(有趣的_ - >一些函数)或一次(有趣的_ - >一些函数)来启动新的浏览器并登录,将该部分与测试分开。
答案 1 :(得分:0)
这个问题似乎已经解决了。我相信我最新的Chrome自动更新解决了这个问题。