diff --git a/src/canopy/canopy.fs b/src/canopy/canopy.fs index 99318bdb..97816285 100644 --- a/src/canopy/canopy.fs +++ b/src/canopy/canopy.fs @@ -193,7 +193,7 @@ let waitFor = waitFor2 "Condition not met in given amount of time. If you want t //find related let rec private findElements cssSelector (searchContext : ISearchContext) : IWebElement list = - searchedFor <- (cssSelector, browser.Url) :: searchedFor + if optmizeByDisablingCoverageReport = false then searchedFor <- (cssSelector, browser.Url) :: searchedFor let findInIFrame () = let iframes = findByCss "iframe" searchContext.FindElements if iframes.IsEmpty then @@ -210,10 +210,14 @@ let rec private findElements cssSelector (searchContext : ISearchContext) : IWeb try let results = - configuredFinders cssSelector searchContext.FindElements - |> Seq.filter(fun list -> not(list.IsEmpty)) + if (hints.ContainsKey cssSelector) then + let finder = hints.[cssSelector] + seq { yield finder cssSelector searchContext.FindElements } + else + configuredFinders cssSelector searchContext.FindElements + |> Seq.filter(fun list -> not(list.IsEmpty)) if Seq.isEmpty results then - findInIFrame() + if optimizeBySkippingIFrameCheck then [] else findInIFrame() else results |> Seq.head with | ex -> [] @@ -771,4 +775,12 @@ let addFinder finder = let currentFinders = configuredFinders configuredFinders <- (fun cssSelector f -> currentFinders cssSelector f - |> Seq.append (seq { yield finder cssSelector f })) \ No newline at end of file + |> Seq.append (seq { yield finder cssSelector f })) + +//hints +let css selector = hints.[selector] <- findByCss; selector +let xpath selector = hints.[selector] <- findByXpath; selector +let jquery selector = hints.[selector] <- findByJQuery; selector +let label selector = hints.[selector] <- findByLabel; selector +let text selector = hints.[selector] <- findByText; selector +let value selector = hints.[selector] <- findByValue; selector \ No newline at end of file diff --git a/src/canopy/configuration.fs b/src/canopy/configuration.fs index bad57482..70e64e7f 100644 --- a/src/canopy/configuration.fs +++ b/src/canopy/configuration.fs @@ -19,4 +19,6 @@ let mutable disableSuggestOtherSelectors = false let mutable autoPinBrowserRightOnLaunch = true let mutable throwIfMoreThanOneElement = false let mutable configuredFinders = finders.defaultFinders -let mutable writeToSelectWithOptionValue = true \ No newline at end of file +let mutable writeToSelectWithOptionValue = true +let mutable optimizeBySkippingIFrameCheck = false +let mutable optmizeByDisablingCoverageReport = false \ No newline at end of file diff --git a/src/canopy/finders.fs b/src/canopy/finders.fs index 05303447..27932431 100644 --- a/src/canopy/finders.fs +++ b/src/canopy/finders.fs @@ -64,4 +64,6 @@ let mutable defaultFinders = yield findByText cssSelector f yield findByJQuery cssSelector f } - ) \ No newline at end of file + ) + +let hints = new System.Collections.Generic.Dictionary (By -> System.Collections.ObjectModel.ReadOnlyCollection) -> IWebElement list)>() \ No newline at end of file diff --git a/tests/basictests/Program.fs b/tests/basictests/Program.fs index ce4294c6..200b923e 100644 --- a/tests/basictests/Program.fs +++ b/tests/basictests/Program.fs @@ -485,6 +485,33 @@ context "other tests" url "http://lefthandedgoat.github.io/canopy/testpages/iframe2" first "body" |> elementWithin "#states" |> elementWithin "1" |> read |> is "Alabama" +context "hints tests" +"css hint" &&& fun _ -> + url testpage + let firstName = css "#firstName" + firstName == "John" + css "#lastName" == "Doe" + +"xpath hint" &&& fun _ -> + url testpage + let firstName = xpath "id('firstName')" + firstName == "John" + xpath "id('lastName')" == "Doe" + +"jquery hint" &&& fun _ -> + url testpage + let firstName = jquery "#firstName" + firstName == "John" + jquery "#lastName" == "Doe" + +"value hint" &&& fun _ -> + url testpage + value "Click Me!!" == "Click Me!!" + +"text hint" &&& fun _ -> + url testpage + text "ajax button not clicked" == "ajax button not clicked" + context "dragging" "draging works" &&& fun _ -> url "http://scrumy.com/silenter39delayed"