EveryStep スクリプト ツール デスクトップでスクリプトを編集するときに、カスタム C# コードを追加できます。 EveryStep スクリプトのカスタマイズの詳細については、「EveryStep スクリプト ツール オブジェクト モデル: クラス、メソッド、プロパティなど」を参照してください。
C# をスクリプトに追加して、条件ステートメントとランダムに定義された変数を使用する例を次に示します。
- コンテンツ検証エラーに対するスクリプトの実行の中止
- 条件付きポップアップ管理
- 条件付きアクション: ショッピング カートまたは在庫切れの場合は順番待ちリストにアイテムを追加する
- 登録プロセスの電子メールのランダム化
- 18歳から12歳までの年齢に入る。
- ランダムに男性または女性の性別を選択する
- オンライン製品カタログからランダムなアイテムを選択する
条件ステートメントの例
Step (1, "test - https://www.test.com"); tab0 = Tabs.NewTab (); tab0.GoTo ("https://www.test.com"); if ( !tab0.Text.Contains("<KEYWORD>")) { return; }
if (!tab0.Text.Contains("Login"))
スクリプトの再生条件は、地域や時間などによって異なります。 したがって、ポップアップなどの一部のコンテンツは、スクリプトを再生している間、条件に基づいて表示できます。 ターゲット Web サイトで条件付きコンテンツを管理する方法を指定するには、EveryStep スクリプトに if ステートメントを追加します。
たとえば、スクリプトの再生中にポップアップがページに表示された場合にポップアップを閉じ、新しいページに移動するには
- ページにポップアップが表示されたスクリプトを記録します。
- または:ターゲットページの[閉じる]ボタンを見つけるためのXpathがある場合は、ポップアップなしでスクリプトを記録できます。
- ポップアップが表示されると予想されるステップに if ステートメントを追加します。 「閉じる」ボタンXpathを使用して条件を指定します。
“if” テスト式で WaitForElement メソッドを使用して、ポップアップが読み込まれるのを待つことに注意してください。
tab0.WaitForElement (TimeSpan timeout, string xpath)
// script_version=3.0; everystep_version=0; date=4/8/2022; Chrome=91.0.4472.77 NetworkFilter.Deny ("https://www.adidas.com/api/chk/customer/baskets?sitePath=us"); Tabs.SetSize (1820, 513); DMBrowser tab0 = null; Step (1, "adidas Official Website | adidas US - https://www.adidas.com/us/kids"); tab0 = Tabs.NewTab (); tab0.GoTo ("https://www.adidas.com/"); tab0.Link ("//A[normalize-space(text())=\"KIDS\"]", "//A[normalize-space()=\"3 STRIPE LIFE\"]/../preceding-sibling::DIV[2]//A[normalize-space()=\"KIDS\"]", "//A[normalize-space()=\"Give Back\"]/../preceding-sibling::DIV[3]//A[normalize-space()=\"KIDS\"]").Click (); Step (2, "Kids Shoes and Clothing | adidas US - https://www.adidas.com/us/kids"); //Waits for pop-up window with the "Close" button to appear on the page for 5 seconds. if (tab0.WaitForElement("5sec".ToDuration (), "//*[@ID=\"modal-root\"]/DIV/DIV/BUTTON", "//BUTTON[@ARIA-LABEL=\"Close\"]")) { //If the "Close" button detected, clicks the button to close the pop-up. Otherwise, jumps to the next line. tab0.Button ("//*[@ID=\"modal-root\"]/DIV/DIV/BUTTON", "//BUTTON[@ARIA-LABEL=\"Close\"]").Click (); } tab0.Span ("//A[normalize-space(@TITLE)=\"SHOP NOW\"]//SPAN[normalize-space()=\"SHOP NOW\"]", "//A[normalize-space(@TITLE)=\"SHOP NOW\"]//SPAN[normalize-space(text())=\"SHOP NOW\"]", "(//SPAN[normalize-space(text())=\"SHOP NOW\"])[1]").Click (); Step (3, "Kids - Ultraboost 22 | adidas US - https://www.adidas.com/us/kids-ultraboost_22");
ショッピングカートへのアイテムの追加、またはアイテムが利用できない場合は順番待ちリストに追加する
もし。。。elseステートメントを使用すると、スクリプトでボタンのクリック、チェックボックスのチェック、別のURLへのナビゲーションなどの特定のアクションを実行できます。指定された条件に基づきます。 たとえば、”ショッピング カートに追加” トランザクションを記録し、スクリプトでカートに品目を追加するか、在庫切れの場合は待機リストに追加することができます。 これを行うには、ifを追加します…else ステートメント:
- ショッピング カートのトランザクションを記録します。
- テスト式を指定するには、品目が在庫にあることを示す要素 ([今すぐ購入] ボタンなど) を選択します。
- tab0 を使用してアイテム ページに移動した後の “if” ステートメントを指定します。WaitForElement (TimeSpan timeout, string xpath) メソッドと “Buy Now” ボタン Xpath.
- 項目が “if” ステートメントとして使用可能な場合に実行するアクションを指定します。 たとえば、「今すぐ購入」をクリックします。
- アイテムが在庫切れの場合 (“今すぐ購入” ボタンが検出されない場合) に実行するアクションを “else” ステートメントとして指定します。 たとえば、「リストに追加」をクリックします。
以下の例を確認してください。
// script_version=3.0; everystep_version=0; date=4/8/2022; Chrome=91.0.4472.77 Tabs.SetSize (1820, 479); DMBrowser tab0 = null; Step (1, "International Shopping: Shop Computers that Ship Internationally - https://www.amazon.com/b?node=16225007011"); tab0 = Tabs.NewTab (); tab0.GoTo ("https://www.amazon.com/b?node=16225007011"); tab0.Image ("//IMG[normalize-space(@ALT)=\"Seagate Portable 2TB External Hard Drive Portable HDD – USB 3.0 for PC, Mac, PlayStation, & Xbox - 1-Year Rescue Service (...\"]", "/HTML/BODY/DIV[1]/DIV[2]/DIV[2]/DIV[1]/DIV[2]/DIV/DIV/DIV[2]/DIV[3]/DIV/DIV/SPAN/A/DIV/IMG").Click (); Step (2, "Amazon.com: Seagate Portable 2TB External Hard Drive Portable HDD – USB 3.0 for PC, Mac, PlayStation, & Xbox - 1-Year Rescue Service (STGX2000400) : Electronics - https://www.amazon.com/gp/product/handle-buy-box/ref=dp_start-bbf_1_glance"); tab0.Navigating ("https://www.amazon.com/gp/product/handle-buy-box/ref=dp_start-bbf_1_glance"); tab0.Para ("//P[normalize-space()=\"500 GB\"]", "//P[normalize-space(text())=\"500 GB\"]", "//LI[normalize-space(@TITLE)=\"Click to select 500 GB\"]/SPAN/DIV/SPAN/SPAN/SPAN/BUTTON/DIV/DIV[1]/P").Click (); // Waits for the "Buy Now" button to be loaded on the page for 5 seconds. if (tab0.WaitForElement("5sec".ToDuration(), "//INPUT[@ID=\"buy-now-button\"]", "(//SPAN[normalize-space()=\"Buy Now\"])[last()]/..//INPUT[@TYPE=\"submit\"]", "(//SPAN[normalize-space()=\"Buy Now\"])[last()]/..//INPUT")) { If the "Buy Now" button detected, clicks the button. Otherwise, the "Buy Now" click is skipped from execution and the "Add to List" click is executed. tab0.Button ("//INPUT[@ID=\"buy-now-button\"]", "(//SPAN[normalize-space()=\"Buy Now\"])[last()]/..//INPUT[@TYPE=\"submit\"]", "(//SPAN[normalize-space()=\"Buy Now\"])[last()]/..//INPUT").Click (); } //if the "Buy Now" button not detected, finds and clicks "Add to List" button instead. else { tab0.Link ("//A[normalize-space()=\"Add to List\"]", "//A[normalize-space(text())=\"Add to List\"]", "//A[@NAME=\"submit.add-to-registry.wishlist.unrecognized\"]").Click (); } Step (3, "Amazon Sign-In - https://www.amazon.com/ap/signin?openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Faw%2Fd%2FB07X3XGG3F&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=usflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&"); tab0.Navigating ("https://www.amazon.com/ap/signin?openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Faw%2Fd%2FB07X3XGG3F&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=usflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&");
データのランダム化
登録プロセスでランダムに生成された電子メールを使用するには、次のようなランダムに生成された値を持つ新しい変数を宣言できます。
string mail = ("test" + Guid.NewGuid().ToString("N") + "@gmail.com");
以下に示すように、この変数を電子メールフィールドのTypeTextメソッドパラメーターとして使用します。
tab0.TextField ("//INPUT[@TYPE=\"text\"]", "//INPUT[@ID=\"Contact_Email_Addr\"]", "//INPUT).TypeText (mail.ToString ());
// script_version=3.0; everystep_version=4.0.8108.2121; date=4/8/2022; Chrome=91.0.4472.77 Tabs.SetSize (1768, 816); DMBrowser tab0 = null; //Declares the mail variable. string mail = ("test+" + Guid.NewGuid().ToString("N") + "@gmail.com"); Step (1, "Dotcom-Monitor: Website Monitoring and Performance Testing - https://www.dotcom-monitor.com/"); tab0 = Tabs.NewTab (); tab0.GoTo ("http://dotcom-monitor.com"); Tabs.SetSize (1768, 623); tab0.Span ("(//SPAN[normalize-space(text())=\"Free Trial\"])[1]", "(//DIV[@ID=\"jivo-iframe-container\"]/preceding-sibling::DIV[3]//SPAN[normalize-space(text())=\"Free Trial\"])[1]", "(//IFRAME[normalize-space(@TITLE)=\"Jivochat\"]/../preceding-sibling::DIV[3]//SPAN[normalize-space(text())=\"Free Trial\"])[1]").Click (); Step (2, "Free Trial Sign Up - https://userauth.dotcom-monitor.com/Account/FreeTrialSignUp"); tab0.Navigating ("https://userauth.dotcom-monitor.com/Account/FreeTrialSignUp"); tab0.TextField ("//INPUT[@TYPE=\"text\"]", "//INPUT[@ID=\"Contact_Email_Addr\"]", "//INPUT").Click (); //Sets the email value to the randomly generated value of the mail variable. tab0.TextField ("//INPUT[@TYPE=\"text\"]", "//INPUT[@ID=\"Contact_Email_Addr\"]", "//INPUT").TypeText (mail.ToString ()); tab0.Button ("//BUTTON[normalize-space()=\"Start Free Trial\"]", "//BUTTON[normalize-space(text())=\"Start Free Trial\"]", "//BUTTON[@TYPE=\"button\"]").Click ();
// script_version=3.0; everystep_version=4.0.5953.25078; date=4/19/2016; IE=11.0.9600.17126 Tabs.ConfigureIEVersion (BrowserMode.IE11, DocumentMode.IE11Emulate); Tabs.SetSize (1768, 651); DMBrowser tab0 = null; Step (1, "The input element - HTML5 tutorial - http://www.html-5-tutorial.com/input-element.php"); tab0 = Tabs.NewTab (); tab0.GoTo ("http://www.html-5-tutorial.com/input-element.php"); // produces random number in range from 18 to 120 int r = (new Random(DateTime.Now.Second)).Next(18, 121); tab0.TextField ("//INPUT[@TYPE=\"number\"]", "//INPUT[@NAME=\"age\"]", "//B[normalize-space()=\"Age:\"]/..//INPUT").TypeText (r.ToString());
// script_version=3.0; everystep_version=4.0.5953.25078; date=4/19/2016; IE=11.0.9600.17126 Tabs.ConfigureIEVersion (BrowserMode.IE11, DocumentMode.IE11Emulate); Tabs.SetSize (1768, 714); DMBrowser tab0 = null; Step (1, "visible - http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_radio"); tab0 = Tabs.NewTab (); tab0.GoTo ("http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_radio"); for (int i = 0; i < 5; i++) // produces random number in range from 0 to 2 int r = (new Random(DateTime.Now.Second)).Next(0, 3); if (r == 0) { tab0.Frame ("//IFRAME[@ID=\"iframeResult\"]", "//IFRAME").RadioButton ("//INPUT[@VALUE=\"female\"]", "//INPUT[@VALUE=\"other\"]/preceding-sibling::INPUT[1]", "//INPUT[@VALUE=\"male\"]/following-sibling::INPUT[1]").Click (); } else if (r == 1) { tab0.Frame ("//IFRAME[@ID=\"iframeResult\"]", "//IFRAME").RadioButton ("//INPUT[@VALUE=\"other\"]", "//INPUT[@VALUE=\"female\"]/following-sibling::INPUT[1]", "//INPUT[@VALUE=\"male\"]/following-sibling::INPUT[2]").Click (); } else if (r == 2) { tab0.Frame ("//IFRAME[@ID=\"iframeResult\"]", "//IFRAME").RadioButton ("//INPUT[@VALUE=\"male\"]", "(//INPUT[@TYPE=\"radio\"])[1]", "(//INPUT[@NAME=\"gender\"])[1]").Click (); } Delay("3sec".ToDuration()); }
オンライン カタログからランダムなアイテムを繰り返し選択するスクリプトを作成するには、以下に示すサンプルを使用します。 後で原点を編集しやすくするために、最初に複数のアイテムクリックを記録することをお勧めします。
// script_version=3.0; everystep_version=4.0.8108.2121; date=4/12/2022; Chrome=91.0.4472.77 Tabs.SetSize (1768, 714); DMBrowser tab0 = null; Step (1, "Amazon.com: Jewelry Made in Italy: Clothing, Shoes & Jewelry - https://www.amazon.com/b?node=19219863011&pf_rd_r=ZS16WVQN9RD996FPB6TH&pf_rd_p=0b9330ec-285a-4f51-9e1c-6765ca451c5f&pd_rd_r=3b9e3cf5-d247-4f50-8d15-a6683fa46846&pd_rd_w=uNsg8&pd_rd_wg=xFg13&ref_=pd_gw_unk"); tab0 = Tabs.NewTab (); tab0.GoTo ("https://www.amazon.com/b?node=19219863011&pf_rd_r=ZS16WVQN9RD996FPB6TH&pf_rd_p=0b9330ec-285a-4f51-9e1c-6765ca451c5f&pd_rd_r=3b9e3cf5-d247-4f50-8d15-a6683fa46846&pd_rd_w=uNsg8&pd_rd_wg=xFg13&ref_=pd_gw_unk"); //Collects all images to count the total number of images in the body and saves them to the body's Attribute tab0.RunScript("(function(){const imgCount=document.querySelectorAll(\".s-image\").length;document.body.setAttribute(\"data-imgCount\", imgCount);})()"); int count = 0; //Gets the value of the Attribute string countString = tab0.Element("//BODY").GetAttributeValue("data-imgCount"); //If countString parsed successfully then clicks a random image on the page. Otherwise, raises an error. if (!int.TryParse(countString, out count)) { RaiseError(string.Format("Failed to get elements count: {0}", countString)); } else { var rnd = new Random(); int i = rnd.Next(1, count); //Clicks the picked image tab0.Image (string.Format ("(//IMG[@CLASS=\"s-image\"])[{0}]", i)).Click (); //Navigates to the item page Step (2, string.Format ("Amazon.com: Selected Item {0}", i)); //Waits for the navigation to be finished. The Navigating (string url) argument can be set to a random URL since it is being scripted while the source script recording and not interfered with the script execution logic. However, the specified URL will be presented in the report data. Check report data for network requests to find an actual URL that was used in the related script run. tab0.Navigating ("https://www.amazon.com/KEZEF-Creations-Sterling-Overlay-Necklace/dp/B008Y357US/ref=lp_19219863011_1_1"); //Navigates back to the main page and repeats the cycle. You can populate the following lines as many times as necessary within your script. Step (3, "Amazon.com: Jewelry Made in Italy: Clothing, Shoes & Jewelry - https://www.amazon.com/b?node=19219863011&pf_rd_r=ZS16WVQN9RD996FPB6TH&pf_rd_p=0b9330ec-285a-4f51-9e1c-6765ca451c5f&pd_rd_r=3b9e3cf5-d247-4f50-8d15-a6683fa46846&pd_rd_w=uNsg8&pd_rd_wg=xFg13&ref_=pd_gw_unk"); tab0.Back (); i = rnd.Next(1, count); tab0.Image (string.Format ("(//IMG[@CLASS=\"s-image\"])[{0}]", i)).Click (); Step (4, string.Format ("Amazon.com: Selected Item {0}", i)); tab0.Navigating ("https://www.amazon.com/Saint-MIchael-Archangel-Medal-Patron/dp/B01G3K6M5C/ref=lp_19219863011_1_3"); Step (5, "Amazon.com: Jewelry Made in Italy: Clothing, Shoes & Jewelry - https://www.amazon.com/b?node=19219863011&pf_rd_r=ZS16WVQN9RD996FPB6TH&pf_rd_p=0b9330ec-285a-4f51-9e1c-6765ca451c5f&pd_rd_r=3b9e3cf5-d247-4f50-8d15-a6683fa46846&pd_rd_w=uNsg8&pd_rd_wg=xFg13&ref_=pd_gw_unk"); tab0.Back (); }