Commit 03a9832da72315060d927c56fa618fabef6d77dd
Merge branch 'dev_test' of http://gitlab.essa.top:88/zengjin/EssaAuto into dev_test
# Conflicts: # src/main/java/com/essa/pageObject/HomePage.java
Showing
10 changed files
with
211 additions
and
229 deletions
Show diff stats
src/main/java/com/essa/framework/BasePage1.java deleted
... | ... | @@ -1,38 +0,0 @@ |
1 | -package com.essa.framework; | |
2 | - | |
3 | -import org.openqa.selenium.WebDriver; | |
4 | -import org.openqa.selenium.WebElement; | |
5 | - | |
6 | -public class BasePage1 { | |
7 | - public static WebDriver driver; | |
8 | - /** | |
9 | - * 构造方法 | |
10 | - * @param driver | |
11 | - */ | |
12 | - public BasePage1(WebDriver driver) { | |
13 | - BasePage.driver = driver; | |
14 | - } | |
15 | - /** | |
16 | - * 填写文本 | |
17 | - * @param element 元素 | |
18 | - * @param text 文本值 | |
19 | - */ | |
20 | - protected void sendKeys(WebElement element, String text) { | |
21 | - element.clear();// 清除原有文本 | |
22 | - element.sendKeys(text); | |
23 | - } | |
24 | - /** | |
25 | - * 鼠标左键点击 | |
26 | - * @param element 元素 | |
27 | - */ | |
28 | - protected void click(WebElement element) { | |
29 | - element.click(); | |
30 | - } | |
31 | - /** | |
32 | - * 获取当前页面的标题 | |
33 | - * @return 标题 | |
34 | - */ | |
35 | - protected String getCurrentPageTitle() { | |
36 | - return driver.getTitle(); | |
37 | - } | |
38 | -} |
src/main/java/com/essa/pageObject/Documentary/PODocumentaryPage.java deleted
... | ... | @@ -1,17 +0,0 @@ |
1 | -package com.essa.pageObject.Documentary; | |
2 | - | |
3 | -import org.openqa.selenium.WebDriver; | |
4 | - | |
5 | -import com.essa.framework.BasePage; | |
6 | - | |
7 | -/** | |
8 | - * @author Administrator | |
9 | - *PO跟单页面 | |
10 | - */ | |
11 | -public class PODocumentaryPage extends BasePage { | |
12 | - | |
13 | - public PODocumentaryPage(WebDriver driver) { | |
14 | - super(driver); | |
15 | - } | |
16 | - | |
17 | -} |
src/main/java/com/essa/pageObject/DocumentaryManage/POBoardPage.java
... | ... | @@ -118,168 +118,5 @@ public class POBoardPage extends BasePage { |
118 | 118 | return isVisibility(By.xpath("//*[contains(text(),'装柜中')]")); |
119 | 119 | } |
120 | 120 | |
121 | - public static class ReceiptCorePage extends BasePage { | |
122 | 121 | |
123 | - public ReceiptCorePage(WebDriver driver) { super(driver);} | |
124 | - | |
125 | - /* | |
126 | - * 页面元素定位 | |
127 | - * */ | |
128 | - | |
129 | - @FindBy (xpath = "//i[@class='iconfont icon-double-arrow-right']") | |
130 | - // @FindBy (xpath = "//*[contains(text(),'高级查询')]") | |
131 | - WebElement advancedQuery; //高级查询 | |
132 | - | |
133 | - @FindBy (xpath = "/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/form[2]/div[5]/div[1]/input[1]") | |
134 | - // @FindBy (xpath = "//input[@type='text' and @ng-model='query.params.poCode']") | |
135 | - | |
136 | - WebElement PO_numbers; //PO单号 | |
137 | - | |
138 | - @FindBy (xpath = "//*[text()='查询']") | |
139 | - // @FindBy (xpath = "//*/button[@type='submit']") | |
140 | - | |
141 | - WebElement Query ; //查询 | |
142 | - | |
143 | - @FindBy (xpath = "//tbody//tr[1]") | |
144 | - // @FindBy (xpath = "//*[@id=\"frontSendListCtrlView\"]/div/div/table/tbody/tr[1]") | |
145 | - | |
146 | - WebElement list_1; //列表第一条数据 | |
147 | - | |
148 | - @FindBy (xpath = "/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/table[1]/tbody[1]") | |
149 | - | |
150 | - WebElement list; //列表 | |
151 | - | |
152 | - @FindBy (xpath = "/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]") | |
153 | - | |
154 | - WebElement document_code; //单据编号 | |
155 | - | |
156 | - @FindBy (xpath = "//*[text()='开始发单']") | |
157 | - // @FindBy (xpath = "/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/button[1]") | |
158 | - | |
159 | - WebElement start_billing; // 开始发单 | |
160 | - | |
161 | - @FindBy (xpath = "//button[@class='btn btn-danger ng-scope']") | |
162 | - | |
163 | - WebElement start_billing_1 ; //前台发单扫码平台的开始发单 | |
164 | - | |
165 | - @FindBy (xpath = "//div[@class='input-group ng-isolate-scope ng-pristine ng-valid']//input[@type='text']") | |
166 | - | |
167 | - WebElement input_document_code;//单据编号输入框 | |
168 | - | |
169 | - @FindBy (xpath = "//button[@type='button' and @ng-click='clickBtn()']") | |
170 | - // @FindBy (xpath = "//*[contains(@ng-click,'clickBtn')]") | |
171 | - | |
172 | - WebElement search ;// 搜索按钮 | |
173 | - | |
174 | - @FindBy (xpath = "//a[contains(text(),'扫码确认接单')]") | |
175 | - | |
176 | - WebElement Confirm_billing ; // 扫码确认接单 | |
177 | - | |
178 | - @FindBy (xpath = "//*[text()='接单完成']") | |
179 | - | |
180 | - WebElement finish_billing; //接单完成 | |
181 | - | |
182 | - @FindBy (xpath = "//*[contains(text(),'所选的工厂订单状态必须为“制单中”或“重新发单”')]") | |
183 | - | |
184 | - WebElement Fail_billing; //发单失败 | |
185 | - | |
186 | - @FindBy (xpath = "//*[contains(text(),'所选的工厂订单状态必须为“发单中”')]") | |
187 | - | |
188 | - //*[coantains(text(),'所选的工厂订单状态必须为'] | |
189 | - // *[@data-notify='message'] | |
190 | - //*[@data-notify='message'] and text()='所选的工厂订单状态必须为“发单中”' | |
191 | - //*[(text()=' 所选的工厂订单状态必须为“发单中”'] | |
192 | - | |
193 | - WebElement Fail_order; //接单失败 | |
194 | - | |
195 | - @FindBy (xpath = "//*[contains(text(),'操作成功')]") | |
196 | - | |
197 | - WebElement Succeed_billing; //发单成功 | |
198 | - | |
199 | - | |
200 | - | |
201 | - | |
202 | - | |
203 | - /* | |
204 | - * 页面方法 | |
205 | - * */ | |
206 | - | |
207 | - public void BillOrder(String PO_Code) { | |
208 | - click(advancedQuery); | |
209 | - forceWait(1000); | |
210 | - | |
211 | - sendKeys(PO_numbers,PO_Code); | |
212 | - forceWait(1000); | |
213 | - | |
214 | - click(Query); | |
215 | - // forceWait(3000); | |
216 | - | |
217 | - dynamicWait(By.xpath("/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/table[1]/tbody[1]")); | |
218 | - | |
219 | - // actionDoubleClick(document_code); // 双击元素 | |
220 | - // forceWait(1000); | |
221 | - String Fo = document_code.getText(); | |
222 | - forceWait(1000); | |
223 | - | |
224 | - click(start_billing); | |
225 | - forceWait(1000); | |
226 | - sendKeys(input_document_code,Fo); | |
227 | - forceWait(1000); | |
228 | - | |
229 | - click(search); | |
230 | - forceWait(1000); | |
231 | - | |
232 | - click(start_billing_1); | |
233 | - forceWait(1000); | |
234 | - // isVisibility(By.xpath("//*[contains(text(),'所选的工厂订单状态必须为“发单中”')]")); | |
235 | - | |
236 | - click(start_billing); | |
237 | - forceWait(1000); | |
238 | - | |
239 | - click(Confirm_billing); | |
240 | - forceWait(1000); | |
241 | - | |
242 | - sendKeys(input_document_code,Fo); | |
243 | - forceWait(1000); | |
244 | - | |
245 | - click(search); | |
246 | - forceWait(1000); | |
247 | - | |
248 | - click(finish_billing); | |
249 | - forceWait(3000); | |
250 | - | |
251 | - | |
252 | - | |
253 | - } | |
254 | - | |
255 | - | |
256 | - /* | |
257 | - *用于断言发单接单是否成功 | |
258 | - * @return boolean | |
259 | - */ | |
260 | - | |
261 | - public boolean isSucceed() {return isElementExist(Succeed_billing);} | |
262 | - | |
263 | - /* | |
264 | - *用于断言发单是否成功 | |
265 | - * @return boolean | |
266 | - */ | |
267 | - | |
268 | - public boolean FailBilling() {return isElementExist(Fail_billing);} | |
269 | - | |
270 | - /* | |
271 | - *用于断言接单是否成功 | |
272 | - * @return boolean | |
273 | - */ | |
274 | - | |
275 | - | |
276 | - public boolean FailOrder() {return isElementExist(Fail_order);} | |
277 | - | |
278 | - | |
279 | - | |
280 | - | |
281 | - | |
282 | - | |
283 | - | |
284 | - } | |
285 | 122 | } | ... | ... |
src/main/java/com/essa/pageObject/DocumentaryManage/ReceiptCorePage.java
0 → 100644
... | ... | @@ -0,0 +1,180 @@ |
1 | +package com.essa.pageObject.DocumentaryManage; | |
2 | + | |
3 | +import com.essa.framework.BasePage; | |
4 | +import org.openqa.selenium.By; | |
5 | +import org.openqa.selenium.WebDriver; | |
6 | +import org.openqa.selenium.WebElement; | |
7 | +import org.openqa.selenium.support.FindBy; | |
8 | + | |
9 | +public class ReceiptCorePage extends BasePage { | |
10 | + | |
11 | + public ReceiptCorePage(WebDriver driver) { super(driver);} | |
12 | + | |
13 | + /* | |
14 | + * 页面元素定位 | |
15 | + * */ | |
16 | + | |
17 | + @FindBy (xpath = "//*[contains(text(),'对不起!没有查询到相关数据')]") | |
18 | + | |
19 | + WebElement Wait ;//等待 | |
20 | + | |
21 | + @FindBy(xpath = "//i[@class='iconfont icon-double-arrow-right']") | |
22 | + // @FindBy (xpath = "//*[contains(text(),'高级查询')]") | |
23 | + WebElement advancedQuery; //高级查询 | |
24 | + | |
25 | + @FindBy (xpath = "/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/form[2]/div[5]/div[1]/input[1]") | |
26 | + // @FindBy (xpath = "//input[@type='text' and @ng-model='query.params.poCode']") | |
27 | + | |
28 | + WebElement PO_numbers; //PO单号 | |
29 | + | |
30 | + @FindBy (xpath = "//*[text()='查询']") | |
31 | + // @FindBy (xpath = "//*/button[@type='submit']") | |
32 | + | |
33 | + WebElement Query ; //查询 | |
34 | + | |
35 | + @FindBy (xpath = "//tbody//tr[1]") | |
36 | + // @FindBy (xpath = "//*[@id=\"frontSendListCtrlView\"]/div/div/table/tbody/tr[1]") | |
37 | + | |
38 | + WebElement list_1; //列表第一条数据 | |
39 | + | |
40 | + @FindBy (xpath = "/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/table[1]/tbody[1]") | |
41 | + | |
42 | + WebElement list; //列表 | |
43 | + | |
44 | + @FindBy (xpath = "/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]") | |
45 | + | |
46 | + WebElement document_code; //单据编号 | |
47 | + | |
48 | + @FindBy (xpath = "//*[text()='开始发单']") | |
49 | + // @FindBy (xpath = "/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/button[1]") | |
50 | + | |
51 | + WebElement start_billing; // 开始发单 | |
52 | + | |
53 | + @FindBy (xpath = "//button[@class='btn btn-danger ng-scope']") | |
54 | + | |
55 | + WebElement start_billing_1 ; //前台发单扫码平台的开始发单 | |
56 | + | |
57 | + @FindBy (xpath = "//div[@class='input-group ng-isolate-scope ng-pristine ng-valid']//input[@type='text']") | |
58 | + | |
59 | + WebElement input_document_code;//单据编号输入框 | |
60 | + | |
61 | + @FindBy (xpath = "//button[@type='button' and @ng-click='clickBtn()']") | |
62 | + // @FindBy (xpath = "//*[contains(@ng-click,'clickBtn')]") | |
63 | + | |
64 | + WebElement search ;// 搜索按钮 | |
65 | + | |
66 | + @FindBy (xpath = "//a[contains(text(),'扫码确认接单')]") | |
67 | + | |
68 | + WebElement Confirm_billing ; // 扫码确认接单 | |
69 | + | |
70 | + @FindBy (xpath = "//*[text()='接单完成']") | |
71 | + | |
72 | + WebElement finish_billing; //接单完成 | |
73 | + | |
74 | + @FindBy (xpath = "//*[contains(text(),'所选的工厂订单状态必须为“制单中”或“重新发单”')]") | |
75 | + | |
76 | + WebElement Fail_billing; //发单失败 | |
77 | + | |
78 | + @FindBy (xpath = "//*[contains(text(),'所选的工厂订单状态必须为“发单中”')]") | |
79 | + | |
80 | + //*[coantains(text(),'所选的工厂订单状态必须为'] | |
81 | + // *[@data-notify='message'] | |
82 | + //*[@data-notify='message'] and text()='所选的工厂订单状态必须为“发单中”' | |
83 | + //*[(text()=' 所选的工厂订单状态必须为“发单中”'] | |
84 | + | |
85 | + WebElement Fail_order; //接单失败 | |
86 | + | |
87 | + @FindBy (xpath = "//*[contains(text(),'操作成功')]") | |
88 | + | |
89 | + WebElement Succeed_billing; //发单成功 | |
90 | + | |
91 | + | |
92 | + | |
93 | + | |
94 | + | |
95 | + /** | |
96 | + *页面方法 | |
97 | + * 前台发单中心页面 | |
98 | + */ | |
99 | + | |
100 | + public void BillOrder(String PO_Code) { | |
101 | + | |
102 | + dynamicWait(By.xpath("//tbody//tr[1]")); | |
103 | + | |
104 | + click(advancedQuery); | |
105 | + forceWait(1000); | |
106 | + | |
107 | + sendKeys(PO_numbers,PO_Code); | |
108 | + forceWait(1000); | |
109 | + | |
110 | + click(Query); | |
111 | + // forceWait(3000); | |
112 | + | |
113 | + dynamicWait(By.xpath("/html[1]/body[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/table[1]/tbody[1]")); | |
114 | + | |
115 | + // actionDoubleClick(document_code); // 双击元素 | |
116 | + // forceWait(1000); | |
117 | + String Fo = document_code.getText(); | |
118 | + forceWait(1000); | |
119 | + | |
120 | + click(start_billing); | |
121 | + forceWait(1000); | |
122 | + sendKeys(input_document_code,Fo); | |
123 | + forceWait(1000); | |
124 | + | |
125 | + click(search); | |
126 | + forceWait(1000); | |
127 | + | |
128 | + click(start_billing_1); | |
129 | + forceWait(1000); | |
130 | + // isVisibility(By.xpath("//*[contains(text(),'所选的工厂订单状态必须为“发单中”')]")); | |
131 | + | |
132 | + click(start_billing); | |
133 | + forceWait(1000); | |
134 | + | |
135 | + click(Confirm_billing); | |
136 | + forceWait(1000); | |
137 | + | |
138 | + sendKeys(input_document_code,Fo); | |
139 | + forceWait(1000); | |
140 | + | |
141 | + click(search); | |
142 | + forceWait(1000); | |
143 | + | |
144 | + click(finish_billing); | |
145 | + forceWait(3000); | |
146 | + | |
147 | + | |
148 | + | |
149 | + } | |
150 | + | |
151 | + | |
152 | + /* | |
153 | + *用于断言发单接单是否成功 | |
154 | + * @return boolean | |
155 | + */ | |
156 | + | |
157 | + public boolean isSucceed() {return isElementExist(Succeed_billing);} | |
158 | + | |
159 | + /* | |
160 | + *用于断言发单是否成功 | |
161 | + * @return boolean | |
162 | + */ | |
163 | + | |
164 | + public boolean FailBilling() {return isElementExist(Fail_billing);} | |
165 | + | |
166 | + /* | |
167 | + *用于断言接单是否成功 | |
168 | + * @return boolean | |
169 | + */ | |
170 | + | |
171 | + | |
172 | + public boolean FailOrder() {return isElementExist(Fail_order);} | |
173 | + | |
174 | + | |
175 | + | |
176 | + | |
177 | + | |
178 | + | |
179 | + | |
180 | +} | ... | ... |
src/main/java/com/essa/pageObject/HomePage.java
1 | 1 | package com.essa.pageObject; |
2 | 2 | |
3 | 3 | import com.essa.pageObject.DocumentaryManage.POBoardPage; |
4 | +import com.essa.pageObject.DocumentaryManage.ReceiptCorePage; | |
4 | 5 | import org.openqa.selenium.By; |
6 | +import com.essa.pageObject.SupplierManage.SupplierOperationsTrackPage; | |
5 | 7 | import org.openqa.selenium.WebDriver; |
6 | 8 | import org.openqa.selenium.WebElement; |
7 | 9 | import org.openqa.selenium.support.FindBy; |
... | ... | @@ -452,9 +454,9 @@ public class HomePage extends BasePage{ |
452 | 454 | /* |
453 | 455 | * 进入前台发单中心页面 |
454 | 456 | * */ |
455 | - public POBoardPage.ReceiptCorePage toReceiptCore() { | |
457 | + public ReceiptCorePage toReceiptCore() { | |
456 | 458 | click(DocumentaryManage); |
457 | 459 | click(Receipt_core); |
458 | - return new POBoardPage.ReceiptCorePage(driver); | |
460 | + return new ReceiptCorePage (driver); | |
459 | 461 | } |
460 | 462 | } |
461 | 463 | \ No newline at end of file | ... | ... |
src/main/java/com/essa/pageObject/SupplierOperationsTrackPage.java renamed to src/main/java/com/essa/pageObject/SupplierManage/SupplierOperationsTrackPage.java
1 | -package com.essa.pageObject; | |
1 | +package com.essa.pageObject.SupplierManage; | |
2 | 2 | |
3 | 3 | import org.openqa.selenium.WebDriver; |
4 | 4 | import org.openqa.selenium.WebElement; |
... | ... | @@ -6,6 +6,11 @@ import org.openqa.selenium.support.FindBy; |
6 | 6 | |
7 | 7 | import com.essa.framework.BasePage; |
8 | 8 | |
9 | +/* | |
10 | +* @Description:BD跟进管理页面 | |
11 | +* @Author: ZengJin | |
12 | +* @CreateTime: 2018/10/29 | |
13 | +*/ | |
9 | 14 | public class SupplierOperationsTrackPage extends BasePage { |
10 | 15 | public SupplierOperationsTrackPage(WebDriver driver) { |
11 | 16 | super(driver); | ... | ... |
src/main/java/com/essa/pageObject/SupplierStrengthPage.java renamed to src/main/java/com/essa/pageObject/SupplierManage/SupplierStrengthPage.java
1 | -package com.essa.pageObject; | |
1 | +package com.essa.pageObject.SupplierManage; | |
2 | 2 | |
3 | 3 | import java.util.List; |
4 | 4 | |
... | ... | @@ -8,7 +8,11 @@ import org.openqa.selenium.WebElement; |
8 | 8 | import org.openqa.selenium.support.FindBy; |
9 | 9 | |
10 | 10 | import com.essa.framework.BasePage; |
11 | - | |
11 | +/* | |
12 | +* @Description:综合实力评估页面 | |
13 | +* @Author: ZengJin | |
14 | +* @CreateTime: 2018/10/29 | |
15 | +*/ | |
12 | 16 | public class SupplierStrengthPage extends BasePage{ |
13 | 17 | public SupplierStrengthPage(WebDriver driver) { |
14 | 18 | super(driver); | ... | ... |
src/main/java/com/essa/testSuite/SendEmail.java
... | ... | @@ -16,7 +16,11 @@ import javax.mail.internet.InternetAddress; |
16 | 16 | import javax.mail.internet.MimeBodyPart; |
17 | 17 | import javax.mail.internet.MimeMessage; |
18 | 18 | import javax.mail.internet.MimeMultipart; |
19 | - | |
19 | +/* | |
20 | +* @Description:发送邮件的demo | |
21 | +* @Author: ZengJin | |
22 | +* @CreateTime: 2018/10/29 | |
23 | +*/ | |
20 | 24 | public class SendEmail { |
21 | 25 | |
22 | 26 | public static void main(String[] args) { | ... | ... |
src/main/java/com/essa/testSuite/TestDevelopmentAbility.java
... | ... | @@ -3,8 +3,8 @@ package com.essa.testSuite; |
3 | 3 | import com.essa.framework.SystemConstant; |
4 | 4 | import com.essa.pageObject.BaseTest; |
5 | 5 | import com.essa.pageObject.HomePage; |
6 | -import com.essa.pageObject.SupplierOperationsTrackPage; | |
7 | -import com.essa.pageObject.SupplierStrengthPage; | |
6 | +import com.essa.pageObject.SupplierManage.SupplierOperationsTrackPage; | |
7 | +import com.essa.pageObject.SupplierManage.SupplierStrengthPage; | |
8 | 8 | import org.openqa.selenium.WebDriver; |
9 | 9 | import org.openqa.selenium.support.PageFactory; |
10 | 10 | import org.testng.annotations.AfterClass; |
... | ... | @@ -16,7 +16,11 @@ import org.testng.asserts.SoftAssert; |
16 | 16 | import java.io.IOException; |
17 | 17 | |
18 | 18 | import static org.testng.Assert.assertEquals; |
19 | - | |
19 | +/* | |
20 | +* @Description:综合实力评估 | |
21 | +* @Author: ZengJin | |
22 | +* @CreateTime: 2018/10/29 | |
23 | +*/ | |
20 | 24 | public class TestDevelopmentAbility extends BaseTest { |
21 | 25 | |
22 | 26 | WebDriver driver; | ... | ... |
src/main/java/com/essa/testSuite/TestReceiptCore.java
1 | 1 | package com.essa.testSuite; |
2 | + | |
2 | 3 | import com.essa.framework.LinkSQL; |
3 | 4 | import com.essa.pageObject.BaseTest; |
4 | -import com.essa.pageObject.DocumentaryManage.POBoardPage; | |
5 | +import com.essa.pageObject.DocumentaryManage.ReceiptCorePage; | |
5 | 6 | import com.essa.pageObject.HomePage; |
6 | 7 | import org.openqa.selenium.WebDriver; |
7 | 8 | import org.openqa.selenium.support.PageFactory; |
... | ... | @@ -32,7 +33,7 @@ public class TestReceiptCore extends BaseTest { |
32 | 33 | this.driver = getDriver(); |
33 | 34 | HomePage homePage = PageFactory.initElements(driver,HomePage.class); |
34 | 35 | homePage.toReceiptCore(); |
35 | - POBoardPage.ReceiptCorePage receiptCorePage = PageFactory.initElements(driver,POBoardPage.ReceiptCorePage.class); | |
36 | + ReceiptCorePage receiptCorePage = PageFactory.initElements(driver,ReceiptCorePage.class); | |
36 | 37 | String PO = LinkSQL.SQLQuery(); |
37 | 38 | |
38 | 39 | receiptCorePage.BillOrder(PO); | ... | ... |